{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "fd4ec4d2",
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "87a78645",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Unnamed: 0</th>\n",
       "      <th>loan_amnt</th>\n",
       "      <th>term</th>\n",
       "      <th>int_rate</th>\n",
       "      <th>grade</th>\n",
       "      <th>home_ownership</th>\n",
       "      <th>emp_length</th>\n",
       "      <th>label</th>\n",
       "      <th>Cash</th>\n",
       "      <th>DirectPay</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>18500.0</td>\n",
       "      <td>36</td>\n",
       "      <td>13.58</td>\n",
       "      <td>5</td>\n",
       "      <td>1</td>\n",
       "      <td>6</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>7000.0</td>\n",
       "      <td>36</td>\n",
       "      <td>7.34</td>\n",
       "      <td>7</td>\n",
       "      <td>1</td>\n",
       "      <td>10</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>16000.0</td>\n",
       "      <td>60</td>\n",
       "      <td>11.98</td>\n",
       "      <td>6</td>\n",
       "      <td>1</td>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>3</td>\n",
       "      <td>28000.0</td>\n",
       "      <td>36</td>\n",
       "      <td>10.90</td>\n",
       "      <td>6</td>\n",
       "      <td>1</td>\n",
       "      <td>6</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>4</td>\n",
       "      <td>8300.0</td>\n",
       "      <td>36</td>\n",
       "      <td>7.34</td>\n",
       "      <td>7</td>\n",
       "      <td>1</td>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Unnamed: 0  loan_amnt  term  int_rate  grade  home_ownership  emp_length  \\\n",
       "0           0    18500.0    36     13.58      5               1           6   \n",
       "1           1     7000.0    36      7.34      7               1          10   \n",
       "2           2    16000.0    60     11.98      6               1           5   \n",
       "3           3    28000.0    36     10.90      6               1           6   \n",
       "4           4     8300.0    36      7.34      7               1           4   \n",
       "\n",
       "   label  Cash  DirectPay  \n",
       "0      0     1          0  \n",
       "1      0     1          0  \n",
       "2      0     1          0  \n",
       "3      0     1          0  \n",
       "4      0     1          0  "
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.read_csv('./train.csv')\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "ad5565d4",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>loan_amnt</th>\n",
       "      <th>term</th>\n",
       "      <th>int_rate</th>\n",
       "      <th>grade</th>\n",
       "      <th>home_ownership</th>\n",
       "      <th>emp_length</th>\n",
       "      <th>label</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>18500.0</td>\n",
       "      <td>36</td>\n",
       "      <td>13.58</td>\n",
       "      <td>5</td>\n",
       "      <td>1</td>\n",
       "      <td>6</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>7000.0</td>\n",
       "      <td>36</td>\n",
       "      <td>7.34</td>\n",
       "      <td>7</td>\n",
       "      <td>1</td>\n",
       "      <td>10</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>16000.0</td>\n",
       "      <td>60</td>\n",
       "      <td>11.98</td>\n",
       "      <td>6</td>\n",
       "      <td>1</td>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>28000.0</td>\n",
       "      <td>36</td>\n",
       "      <td>10.90</td>\n",
       "      <td>6</td>\n",
       "      <td>1</td>\n",
       "      <td>6</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>8300.0</td>\n",
       "      <td>36</td>\n",
       "      <td>7.34</td>\n",
       "      <td>7</td>\n",
       "      <td>1</td>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   loan_amnt  term  int_rate  grade  home_ownership  emp_length  label\n",
       "0    18500.0    36     13.58      5               1           6      0\n",
       "1     7000.0    36      7.34      7               1          10      0\n",
       "2    16000.0    60     11.98      6               1           5      0\n",
       "3    28000.0    36     10.90      6               1           6      0\n",
       "4     8300.0    36      7.34      7               1           4      0"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.drop([\"Cash\",\"DirectPay\",\"Unnamed: 0\"],axis=1,inplace=True)\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "e9b02480",
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.utils import shuffle"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "908cba4c",
   "metadata": {},
   "outputs": [],
   "source": [
    "train = shuffle(df)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "46806409",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "313     0\n",
       "2635    1\n",
       "1799    0\n",
       "3954    1\n",
       "2309    0\n",
       "       ..\n",
       "744     0\n",
       "3959    1\n",
       "1700    0\n",
       "1952    0\n",
       "4911    1\n",
       "Name: label, Length: 4992, dtype: int64"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y = train.label\n",
    "y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "8b11dd53",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\Develop Tools\\anaconda\\envs\\ml\\lib\\site-packages\\pandas\\core\\frame.py:4315: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  errors=errors,\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>loan_amnt</th>\n",
       "      <th>term</th>\n",
       "      <th>int_rate</th>\n",
       "      <th>grade</th>\n",
       "      <th>home_ownership</th>\n",
       "      <th>emp_length</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>313</th>\n",
       "      <td>25000.0</td>\n",
       "      <td>36</td>\n",
       "      <td>5.31</td>\n",
       "      <td>7</td>\n",
       "      <td>3</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2635</th>\n",
       "      <td>35000.0</td>\n",
       "      <td>60</td>\n",
       "      <td>18.45</td>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1799</th>\n",
       "      <td>20000.0</td>\n",
       "      <td>36</td>\n",
       "      <td>16.01</td>\n",
       "      <td>5</td>\n",
       "      <td>3</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3954</th>\n",
       "      <td>15000.0</td>\n",
       "      <td>36</td>\n",
       "      <td>24.84</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2309</th>\n",
       "      <td>40000.0</td>\n",
       "      <td>36</td>\n",
       "      <td>9.43</td>\n",
       "      <td>6</td>\n",
       "      <td>1</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      loan_amnt  term  int_rate  grade  home_ownership  emp_length\n",
       "313     25000.0    36      5.31      7               3          10\n",
       "2635    35000.0    60     18.45      4               1           3\n",
       "1799    20000.0    36     16.01      5               3           7\n",
       "3954    15000.0    36     24.84      3               1           2\n",
       "2309    40000.0    36      9.43      6               1           7"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train.drop(\"label\",axis=1,inplace=True)\n",
    "train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "5286e267",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>loan_amnt</th>\n",
       "      <th>term</th>\n",
       "      <th>int_rate</th>\n",
       "      <th>grade</th>\n",
       "      <th>home_ownership</th>\n",
       "      <th>emp_length</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>313</th>\n",
       "      <td>25000.0</td>\n",
       "      <td>36</td>\n",
       "      <td>5.31</td>\n",
       "      <td>7</td>\n",
       "      <td>3</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2635</th>\n",
       "      <td>35000.0</td>\n",
       "      <td>60</td>\n",
       "      <td>18.45</td>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1799</th>\n",
       "      <td>20000.0</td>\n",
       "      <td>36</td>\n",
       "      <td>16.01</td>\n",
       "      <td>5</td>\n",
       "      <td>3</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3954</th>\n",
       "      <td>15000.0</td>\n",
       "      <td>36</td>\n",
       "      <td>24.84</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2309</th>\n",
       "      <td>40000.0</td>\n",
       "      <td>36</td>\n",
       "      <td>9.43</td>\n",
       "      <td>6</td>\n",
       "      <td>1</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>744</th>\n",
       "      <td>40000.0</td>\n",
       "      <td>60</td>\n",
       "      <td>9.92</td>\n",
       "      <td>6</td>\n",
       "      <td>3</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3959</th>\n",
       "      <td>19200.0</td>\n",
       "      <td>36</td>\n",
       "      <td>15.04</td>\n",
       "      <td>5</td>\n",
       "      <td>1</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1700</th>\n",
       "      <td>11500.0</td>\n",
       "      <td>36</td>\n",
       "      <td>23.87</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1952</th>\n",
       "      <td>15000.0</td>\n",
       "      <td>36</td>\n",
       "      <td>16.01</td>\n",
       "      <td>5</td>\n",
       "      <td>1</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4911</th>\n",
       "      <td>40000.0</td>\n",
       "      <td>60</td>\n",
       "      <td>10.42</td>\n",
       "      <td>6</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>4992 rows × 6 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "      loan_amnt  term  int_rate  grade  home_ownership  emp_length\n",
       "313     25000.0    36      5.31      7               3          10\n",
       "2635    35000.0    60     18.45      4               1           3\n",
       "1799    20000.0    36     16.01      5               3           7\n",
       "3954    15000.0    36     24.84      3               1           2\n",
       "2309    40000.0    36      9.43      6               1           7\n",
       "...         ...   ...       ...    ...             ...         ...\n",
       "744     40000.0    60      9.92      6               3          10\n",
       "3959    19200.0    36     15.04      5               1          10\n",
       "1700    11500.0    36     23.87      3               1          10\n",
       "1952    15000.0    36     16.01      5               1          10\n",
       "4911    40000.0    60     10.42      6               2           2\n",
       "\n",
       "[4992 rows x 6 columns]"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x = train\n",
    "x"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "a2def141",
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.model_selection import train_test_split"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "448c828a",
   "metadata": {},
   "outputs": [],
   "source": [
    "x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.2,random_state=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "7f66e4a1",
   "metadata": {},
   "outputs": [],
   "source": [
    "from xgboost import XGBClassifier"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "d825e6fc",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[21:22:36] WARNING: C:/Users/Administrator/workspace/xgboost-win64_release_1.5.1/src/learner.cc:1115: Starting in XGBoost 1.3.0, the default evaluation metric used with the objective 'binary:logistic' was changed from 'error' to 'logloss'. Explicitly set eval_metric if you'd like to restore the old behavior.\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\Develop Tools\\anaconda\\envs\\ml\\lib\\site-packages\\xgboost\\sklearn.py:1224: UserWarning: The use of label encoder in XGBClassifier is deprecated and will be removed in a future release. To remove this warning, do the following: 1) Pass option use_label_encoder=False when constructing XGBClassifier object; and 2) Encode your labels (y) as integers starting with 0, i.e. 0, 1, 2, ..., [num_class - 1].\n",
      "  warnings.warn(label_encoder_deprecation_msg, UserWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "XGBClassifier(base_score=0.5, booster='gbtree', colsample_bylevel=1,\n",
       "              colsample_bynode=1, colsample_bytree=1, enable_categorical=False,\n",
       "              gamma=0, gpu_id=-1, importance_type=None,\n",
       "              interaction_constraints='', learning_rate=0.300000012,\n",
       "              max_delta_step=0, max_depth=6, min_child_weight=1, missing=nan,\n",
       "              monotone_constraints='()', n_estimators=100, n_jobs=8,\n",
       "              num_parallel_tree=1, predictor='auto', random_state=0,\n",
       "              reg_alpha=0, reg_lambda=1, scale_pos_weight=1, subsample=1,\n",
       "              tree_method='exact', validate_parameters=1, verbosity=None)"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model = XGBClassifier()\n",
    "model.fit(x_train,y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "bc57f99a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(3993, 999, 999, 3993)"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(x_train),len(x_test),len(y_test),len(y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "6d1860b5",
   "metadata": {},
   "outputs": [],
   "source": [
    "y_pred = model.predict(x_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "7da4a57a",
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.metrics import accuracy_score"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "cf7e66ae",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "88.89%\n"
     ]
    }
   ],
   "source": [
    "acc = accuracy_score(y_test,y_pred)\n",
    "print(\"%.2f%%\"%(acc*100))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "ad4b1ffc",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "94.89%\n"
     ]
    }
   ],
   "source": [
    "y_pred_train = model.predict(x_train)\n",
    "print(\"%.2f%%\"%(accuracy_score(y_train,y_pred_train)*100))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "edb6c2aa",
   "metadata": {},
   "outputs": [],
   "source": [
    "import joblib"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "43631444",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['xgb_plus.joblib']"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "joblib.dump(model,\"xgb_plus.joblib\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "5513e375",
   "metadata": {},
   "outputs": [],
   "source": [
    "xgb = joblib.load(\"xgb_plus.joblib\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "64bc2428",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "87.79%\n"
     ]
    }
   ],
   "source": [
    "y_pred = xgb.predict(x_test)\n",
    "acc = accuracy_score(y_test,y_pred)\n",
    "print(\"%.2f%%\"%(acc*100))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "a488c466",
   "metadata": {},
   "outputs": [],
   "source": [
    "from matplotlib import pyplot"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "30d41718",
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn import metrics as ms"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "0f447ec8",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.8888888888888888"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_accuracy = ms.accuracy_score(y_test, y_pred)#准确率\n",
    "test_accuracy"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "36834346",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.8881821097790786"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_auc = ms.roc_auc_score(y_test,y_pred)#auc\n",
    "test_auc"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "09049035",
   "metadata": {},
   "outputs": [
    {
     "ename": "SyntaxError",
     "evalue": "invalid character in identifier (<ipython-input-26-578e50de1b96>, line 1)",
     "output_type": "error",
     "traceback": [
      "\u001B[1;36m  File \u001B[1;32m\"<ipython-input-26-578e50de1b96>\"\u001B[1;36m, line \u001B[1;32m1\u001B[0m\n\u001B[1;33m    fpr,tpr,threshold = ms.roc_curve(y_test,y_pred)\u001B[0m\n\u001B[1;37m                                                   ^\u001B[0m\n\u001B[1;31mSyntaxError\u001B[0m\u001B[1;31m:\u001B[0m invalid character in identifier\n"
     ]
    }
   ],
   "source": [
    "fpr,tpr,threshold = ms.roc_curve(y_test,y_pred)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "id": "cb9f6260",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(array([0.        , 0.07465619, 1.        ]),\n",
       " array([0.        , 0.85102041, 1.        ]),\n",
       " array([2, 1, 0], dtype=int64))"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "fpr,tpr,threshold = ms.roc_curve(y_test,y_pred)\n",
    "fpr,tpr,threshold"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "id": "b4ae554f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "pyplot.plot(fpr, tpr, color='blue',lw=2, label='ROC curve (area = %.2f%%)'% (test_auc * 100.0))###假正率为横坐标，真正率为纵坐标做曲线\n",
    "\n",
    "pyplot.legend(loc=\"lower right\")\n",
    "\n",
    "pyplot.plot([0, 1], [0, 1], color='navy', linestyle='--')\n",
    "\n",
    "pyplot.xlabel('False Positive Rate')\n",
    "\n",
    "pyplot.ylabel('True Positive Rate')\n",
    "\n",
    "pyplot.title('ROC curve')\n",
    "\n",
    "pyplot.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "4f6ca911",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
